const  express = require('express')
const cors = require('cors')
//处理表单数据
const bodyParser = require('body-parser')

// 导入expressjwt解析token
const {expressjwt} =require('express-jwt')

//导入jwt的密钥
const jwtconfig= require('./jwt_config/index')

//导入登陆的路由
const loginroute = require('./router/login')

// 导入关于用户的路由
const userroute = require('./router/userinfo')
// 导入joi
const joi = require('joi')
const app = express()
//导入multer用于上传文件
const multer = require('multer')
const upload = multer({ dest:'./public/upload' })
// dest:'./public/upload' 是文件保存的位置
//设置files名称
app.use(upload.any())
// 静态托管
app.use(express.static("./public"));


app.use(cors())

//注册处理数据库操作失败的全局中间件
app.use((req,res,next)=>{
    res.dbno=(err,status=197)=>{
        res.send({
            status,
            message:err instanceof Error ? err.message :err
        })
    }
    next()
})
//注册处理其他操作失败的全局中间件（账号已存在、账号不存在之类的错误）
app.use((req,res,next)=>{
    res.no=(err,status=196)=>{
        res.send({
            status,
            message:err instanceof Error ? err.message :err
        })
    }
    next()
})

//处理json的数据格式
app.use(bodyParser.json())

//注册处理表单数据的中间件
//当extended为false时值为数组或字符串
// 当extended为true时，值可以为任意类型
app.use(bodyParser.urlencoded({extended:false}))
//注册解析token的中间件
//排除不需要的token的路由
// app.use(expressjwt({secret:jwtconfig.jswSecretKey,algorithms:["HS256"]}).unless({
//      path: [/^\/api\//] 
// }))


// 注册登录路由
app.use('/api',loginroute)
// 注册上传头像的路由
app.use('/user',userroute)
//定义一个捕获表单数据错误的错误级别的中间件
// app.use(function (req, res, next) {
//     //判断错误类型是不是joi类型
//     if (err instanceof joi.ValidationError) return res.unjoi=(err,status=1)=>{
//             res.send('数据验证错误')
//     }
//     next()

// })



app.listen(8080,function(err){
    if(err) return err
    console.log('http://127.0.0.1:8080');
})